home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 1.0 beta / flock-1.0RC3.en-US.win32.exe / flock / components / flockMigrationManager.js < prev    next >
Text File  |  2007-10-18  |  4KB  |  164 lines

  1. //
  2. // BEGIN FLOCK GPL
  3. // 
  4. // Copyright Flock Inc. 2005-2007
  5. // http://flock.com
  6. // 
  7. // This file may be used under the terms of of the
  8. // GNU General Public License Version 2 or later (the "GPL"),
  9. // http://www.gnu.org/licenses/gpl.html
  10. // 
  11. // Software distributed under the License is distributed on an "AS IS" basis,
  12. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13. // for the specific language governing rights and limitations under the
  14. // License.
  15. // 
  16. // END FLOCK GPL
  17. //
  18.  
  19. const MM_CONTRACTID = "@flock.com/migration-manager;1";
  20. const MM_CLASSID    = Components.ID("{481E822D-937F-4E76-8AFC-F636061B7AC6}");
  21. const MM_CLASSNAME  = "Flock Migration Manager";
  22.  
  23.  
  24. const Cc = Components.classes;
  25. const Ci = Components.interfaces;
  26. const Cr = Components.results;
  27.  
  28.  
  29. function DEBUG(x) {
  30.   debug("flockMigrationManager: " + x + "\n");  
  31. }
  32.  
  33. function MigrationManager() {
  34. }
  35.  
  36. MigrationManager.prototype = {
  37.   setup: function MM_setup(oldVersion) {
  38.     var prefs = Cc["@mozilla.org/preferences-service;1"]
  39.                 .getService(Ci.nsIPrefBranch);
  40.     prefs.setBoolPref("flock.webdetective.upgraded", false);
  41.  
  42.     var args = Cc['@mozilla.org/supports-array;1']
  43.       .createInstance(Ci.nsISupportsArray);
  44.  
  45.     var versionStr = Cc['@mozilla.org/supports-cstring;1']
  46.       .createInstance(Ci.nsISupportsCString);
  47.     versionStr.data = oldVersion;
  48.     args.AppendElement(versionStr);
  49.     
  50.     var catman = Cc['@mozilla.org/categorymanager;1']
  51.       .getService(Ci.nsICategoryManager);
  52.  
  53.     var e = catman.enumerateCategory('flockMigratable');
  54.     while (e.hasMoreElements()) {
  55.       var entry = e.getNext().QueryInterface(Ci.nsISupportsCString);
  56.       if (!entry)
  57.         continue;
  58.  
  59.       var contractID = catman.getCategoryEntry('flockMigratable', entry.data);
  60.       var service = Cc[contractID].getService(Ci.flockIMigratable);
  61.  
  62.       try {
  63.         DEBUG("Checking " + service.migrationName + " (" + contractID + ")");
  64.         if (service.needsMigration(oldVersion)) {
  65.           DEBUG(service.migrationName + " needs migration");
  66.           args.AppendElement(service);
  67.         }
  68.       } catch (e) { 
  69.         DEBUG(e);
  70.       }
  71.     }
  72.  
  73.     DEBUG('Found '+ (args.Count() - 1) + ' services needing migration');
  74.     return args;
  75.   },
  76.  
  77.   getInterfaces: function MM_getInterfaces(countRef) {
  78.     var interfaces = [Ci.flockIMigrationManager, Ci.nsIClassInfo]
  79.     countRef.value = interfaces.length;
  80.     return interfaces;
  81.   },
  82.   getHelperForLanguage: function MM_getHelperForLanguage(language) {
  83.     return null;
  84.   },
  85.   contractID: MM_CONTRACTID,
  86.   classDescription: MM_CLASSNAME,
  87.   classID: MM_CLASSID,
  88.   implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT,
  89.   flags: Ci.nsIClassInfo.SINGLETON,
  90.  
  91.   QueryInterface: function MM_QueryInterface(iid) {
  92.     if (iid.equals(Ci.flockIMigrationManager) ||
  93.         iid.equals(Ci.nsIClassInfo) ||
  94.         iid.equals(Ci.nsISupports))
  95.       return this;
  96.     throw Cr.NS_ERROR_NO_INTERFACE;
  97.   }
  98. }
  99.  
  100.  
  101. function GenericComponentFactory(ctor) {
  102.   this._ctor = ctor;
  103. }
  104.  
  105. GenericComponentFactory.prototype = {
  106.  
  107.   _ctor: null,
  108.  
  109.   // nsIFactory
  110.   createInstance: function(outer, iid) {
  111.     if (outer != null)
  112.       throw Cr.NS_ERROR_NO_AGGREGATION;
  113.     return (new this._ctor()).QueryInterface(iid);
  114.   },
  115.  
  116.   // nsISupports
  117.   QueryInterface: function(iid) {
  118.     if (iid.equals(Ci.nsIFactory) ||
  119.         iid.equals(Ci.nsISupports))
  120.       return this;
  121.     throw Cr.NS_ERROR_NO_INTERFACE;
  122.   },
  123. };
  124.  
  125. var Module = {
  126.   QueryInterface: function(iid) {
  127.     if (iid.equals(Ci.nsIModule) ||
  128.         iid.equals(Ci.nsISupports))
  129.       return this;
  130.  
  131.     throw Cr.NS_ERROR_NO_INTERFACE;
  132.   },
  133.  
  134.   getClassObject: function(cm, cid, iid) {
  135.     if (!iid.equals(Ci.nsIFactory))
  136.       throw Cr.NS_ERROR_NOT_IMPLEMENTED;
  137.  
  138.     if (cid.equals(MM_CLASSID))
  139.       return new GenericComponentFactory(MigrationManager)
  140.  
  141.     throw Cr.NS_ERROR_NO_INTERFACE;
  142.   },
  143.  
  144.   registerSelf: function(cm, file, location, type) {
  145.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  146.     cr.registerFactoryLocation(MM_CLASSID, MM_CLASSNAME, MM_CONTRACTID,
  147.                                file, location, type);
  148.   },
  149.  
  150.   unregisterSelf: function(cm, location, type) {
  151.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  152.     cr.unregisterFactoryLocation(MM_CLASSID, location);
  153.   },
  154.  
  155.   canUnload: function(cm) {
  156.     return true;
  157.   },
  158. };
  159.  
  160. function NSGetModule(compMgr, fileSpec)
  161. {
  162.   return Module;
  163. }
  164.